home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mind Run
/
Mind Run (1991)(Crealude)(FR)(M6)[!][CFI MINDRUM 91148].iso
/
re48.amos
/
re48.amosSourceCode
Wrap
AMOS Source Code
|
2008-12-15
|
41KB
|
1,147 lines
' Re48 16 4 91
Set Buffer 20 : Close Workbench : Close Editor : Randomize Timer
If Exist("CFI:") : Dir$="CFI:" : Else Dir$="GIGUNA:GAMOS/" : End If
'
Dim TPTS(6),ZBUT(28),BBUT(28),ZBI(36),RSV(16,2),H(28),V(28),CPL(8,3)
Dim XB(2),YB(2),Z(36),CUR(12,9,2),GAM$(12),PREF(5),SON(14,6,3),F$(20)
Global TEST,TPTS(),TEMPS,PTS,APTS,NBK,NBI,NB,NBUT,ZBUT(),BBUT(),DIFF
Global BUT$,SG$,SA$,SB$,ZBI(),RSV(),H(),V(),CPL(),XB(),YB(),Z(),CUR(),HCR,VCR
Global BBOULE,XT,YT,XH,YH,XR,YR,BCUR,HCURS,VCURS,XC,YC,XP,YP,CX,CY,SON()
Global BCP,CYCLETAPE,ETAPE,QST,MXETAPE,DIFF,DERANN$,ELTEMPS,GAUCHE
Global DUREE,VITESSE,BZN,MZ,ABANDON,RENOUV$,TSAB,TREN,LANGUE$,TEST$
Global LIGNE,DIT,DIT0,GAM$(),PREF(),BOUTONS,BOUTONA,BOUTONB,FAITMUSE
Global BOULBK,CRSBK,FLCHBK,CERVBK,BASEBLOCK,F$(),DC,DIT7,DIT8
'
'
TEST$="Reflexes" : TEST=4 : INITEST : LESSIVE[0]
'
''''''''''''''''''''''' Boucle de test '''''''''''''''''''''''''''''''
While ETAPE<MXETAPE and Not ABANDON
PAUSEPOINTS : Exit If Param=3
VOISTEST
PTS=1-(DIFF=1) : METPOINTS
VITESSE=1000-10*DIFF : DUREE=2 : VIDCUR[1]
On QST Proc RELIES,ALIGNES,ENTREDEUX,AUDESSUS
On QST-4 Proc MEDAILLON,SOLITAIRE,DEFENETRE,AUTFENETRE
'
If PTS>0 Then BRUITB[1] : Wait 100
BRUIT[0,0,"tiroircaiss2"] : If BOUTONB and(PREF(4)=1) Then PREF(4)=0
GAUCHE[Screen,45] : LESSIVE[1] : If PTS<APTS Then DESTROYTOUT
FAITTOTAL
Wend
RETOUR
' Questions de REFLEXES
Procedure RELIES
Load "banqueI/F.Chemin"+Str$(DIFF)-" "+".abk" : Paste Icon 352-DC,15,1
B$="M.Robots" : If DIFF>3 Then B$="M.Cercles3"
BANQBI[B$,""]
TEMPS[0]
N=0 : For CX=1 To 2 : For CY=0 To 3
Inc N : H(N)=357-DC+140*(CX-1) : V(N)=8+46*CY
CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next : Next : NB=N
Gosub R_RELIES : PARLE["Joined",1] : INICURS[1,0]
TSAB=Timer+49
Do
MULTIEXAM : If Param : Gosub R_RELIES : Else Exit : End If
Loop
Pop Proc
'
R_RELIES:
VIDE : For N=1 To NB : ZBI(N)=0 : Next
TIRE[0] : N$=""
' Met un bon couple
D=1+Rnd(3) : TIRE[NBK] : Restore "REL"+Str$(DIFF)-" "
If D>1 Then For X=1 To D-1 : Read N,N : Next
For NBUT=1 To 2 : Read N : N$=N$+Str$(N)+" "
ZBI(N)=Param : BBUT(NBUT)=N : ZBUT(NBUT)=BZN+N
Next : NBUT=2
' Met un faux couple en �vitant qu'ils soient reli�s
Repeat : D1=1+Rnd(3) : Until D1<>D : Restore "REL"+Str$(DIFF)-" "
If D1>1 Then For X=1 To D1-1 : Read N,N : Next
Read N : N$=N$+Str$(N)+" " : Read N2 : N$=N$+Str$(N2)+" "
TIRE[NBK] : ZBI(N)=Param
Repeat : N=1+Rnd(NB-1) : Until Instr(N$,Str$(N)+" ")=0 : N$=N$+Str$(N)+" "
ZBI(N)=Param
' Remplit le reste et place tout
For X=1 To 4 : TIRE[NBK] : AFFECTE[1,NB,Param] : Next : PLACE
REL1: Data 1,2,3,5,4,6,7,8
REL2: Data 1,8,2,4,3,5,6,7
REL3: Data 1,7,2,5,3,6,4,8
REL4: Data 1,5,2,3,4,7,6,8
REL5: Data 1,8,2,7,3,6,4,5
REL6: Data 1,2,3,6,4,8,5,7
Return
End Proc
Procedure ALIGNES
I=1 : T=2 : If DIFF>3 Then I=2 : T=3
Load "banqueI/alignes3.abk"
If DIFF>3
A$="banqueI/alignes4.abk"
If Exist(A$)
Erase 2 : Load A$
End If : End If
Paste Icon 352-DC,0,1
BANQBI["B.small",""] : TEMPS[0]
H0=375-DC : DH=33 : V0=15 : DV=33 : DB=20
' d�finit les coordonn�es du carr� de base
N=0 : For Y=0 To T : For X=0 To T : Inc N : H(N)=H0+X*DH : V(N)=V0+Y*DV
Next : Next
' puis du pourtour
CY=T+1 : For CX=1 To T+1 : Inc N : H(N)=H0+(CX-1)*DH : V(N)=DB+V0+CY*DV
CUR(CX,CY,0)=H(N)+10 : CUR(CX,CY,1)=V(N)+10 : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next
CX=T+2 : For CY=0 To T+1 : Inc N : H(N)=DB+H0+(CX-1)*DH : V(N)=V0+CY*DV
If CY=T+1 Then V(N)=DB+V0+DV*(T+1)
CUR(CX,CY,0)=H(N)+10 : CUR(CX,CY,1)=V(N)+10 : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next : NB=N
' NB=N+1 : H(NB)=DB+H0+(T+1)*DH : V(NB)=DB+V0+(T+1)*DV
Gosub R_ALIGNES : PARLE["Same",1]
TSAB=Timer+49 : INICURS[T+2,T+1]
Do
MULTIEXAM : If Param : Gosub R_ALIGNES : Else Exit : End If
Loop
Pop Proc
'
R_ALIGNES:
VIDE : CAVA=False : D=Sqr(NB)-1 : Repeat
' Met tout au hasard
For N=1 To NB : ZBI(N)=37+Rnd(17) : Z(N)=1 : Next
' Regarde s'il y a du bon
For Y=0 To D-1 : For X=0 To D-1 : N=X+1+D*Y
P=D*D+1+X : If ZBI(N)=ZBI(P) Then Z(P)=0 : CAVA=True
P=D*D+D+1+Y : If ZBI(N)=ZBI(P) Then Z(P)=0 : CAVA=True
If X=Y and ZBI(N)=ZBI(NB) : Z(NB)=0 : CAVA=True : End If
Next : Next
Until CAVA=True
NBUT=0
For N=D*D+1 To NB
If Z(N)=0 : Inc NBUT : BBUT(NBUT)=N : ZBUT(NBUT)=BZN+N
End If
Add ZBI(N),-18 : Rem Couleur diff�rente
Next : PLACE : Return
End Proc
Procedure ENTREDEUX
Erase 1 : Erase 2
Load "banqueI/entredeux.abk" : Paste Icon 336-DC,0,1
B$="M.clowns" : If DIFF>3 : B$="K.Japideo" : End If
BANQBI[B$,""] : TEMPS[0]
NBUT=2 : N=0
For CY=0 To 2 Step 2 : For CX=2 To 4
Inc N : H(N)=272-DC+50*CX : V(N)=5+45*CY
CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next : Next
For CY=1 To 3 Step 2 : For CX=1 To 4
Inc N : H(N)=302-DC+50*CX : V(N)=5+45*CY
CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next : Next : NB=N : NBUT=2
Gosub R_ENTREDEUX : PARLE["Between",1] : INICURS[2,0]
TSAB=Timer+49
Do
MULTIEXAM : If Param : Gosub R_ENTREDEUX : Else Exit : End If
Loop
Pop Proc
'
R_ENTREDEUX:
ENTRE: Data 2,9,6,9,6,14,1,8,5,8,5,13,7,4,12,1,2,3,7,8,9,8,9,10
Data 4,5,6,11,12,13,12,13,14,2,8,4,8,4,11,3,9,5,9,5,12,10,6,13
TIRE[0] : For N=1 To NB : ZBI(N)=0 : Next : Rem vide tout
Restore ENTRE : B=1+Rnd(6) : For X=1 To B : Read N,N,N : Next
Read N1 : Read BBUT(1) : Read N2
TIRE[NBK] : ZBI(N1)=Param : ZBI(N2)=Param
TIRE[NBK] : ZBI(BBUT(1))=Param : ZBUT(1)=BZN+BBUT(1)
S$=Str$(N1)+Str$(N2)+Str$(BBUT(1))
Repeat : Read M1,BBUT(2),M2
Until Instr(S$,Str$(M1))+Instr(S$,Str$(M2))+Instr(S$,Str$(BBUT(2)))=0
TIRE[NBK] : ZBI(M1)=Param : ZBI(M2)=Param
TIRE[NBK] : ZBI(BBUT(2))=Param : ZBUT(2)=BZN+BBUT(2)
'
For N=7 To NB : TIRE[NBK] : AFFECTE[1,NB,Param] : Next
PLACE : Return
End Proc
Procedure AUDESSUS
BANQBI["F.reflex1",""] : Reserve Zone 38
H0=350-DC : DH=30 : V0=5 : DV=30
TAILLE=3 : If DIFF>3 Then TAILLE=4
' d�finit les coordonn�es de la pyramide
For CY=0 To 4 Step 2 : For CX=1 To TAILLE
Inc N : H(N)=H0+DH*(2*CX-2) : V(N)=V0+CY*DV
CUR(CX,CY,0)=H(N)+10 : CUR(CX,CY,1)=V(N)+10 : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next : Next
For CY=1 To 3 Step 2 : For CX=2 To TAILLE
Inc N : H(N)=H0+DH*(2*CX-3) : V(N)=V0+CY*DV
CUR(CX,CY,0)=H(N)+10 : CUR(CX,CY,1)=V(N)+10 : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next : Next : NB=N
'
Gosub R_AUDESSUS : PARLE["Top",1] : INICURS[1,0] : TSAB=Timer+49
Do
MULTIEXAM : If Param : Gosub R_AUDESSUS : Else Exit : End If
Loop : Reserve Zone
Pop Proc
'
R_AUDESSUS:
A1: Data 1,10
A2: Data 2,10,11
A3: Data 1,11
A4: Data 2,10,12
A5: Data 4,10,11,12,13
A6: Data 2,11,13
A7: Data 1,12
A8: Data 2,12,13
A9: Data 1,13
A10: Data 4,1,2,4,5
A11: Data 4,2,3,5,6
A12: Data 4,4,5,7,8
A13: Data 4,5,6,8,9
'
B1: Data 1,13
B2: Data 2,13,14
B3: Data 2,14,15
B4: Data 1,15
B5: Data 2,13,16
B6: Data 4,13,14,16,17
B7: Data 4,14,15,17,18
B8: Data 2,15,18
B9: Data 1,16
B10: Data 2,16,17
B11: Data 2,17,18
B12: Data 2,18
B13: Data 4,1,2,5,6
B14: Data 4,2,3,6,7
B15: Data 4,3,4,7,8
B16: Data 4,5,6,9,10
B17: Data 4,6,7,10,11
B18: Data 4,7,8,11,12
TIRE[0] : AJOUR : For X=0 To NB : ZBI(X)=0 : Next
R$="A" : If DIFF>3 Then R$="B"
LESSIVE[1]
For N=1 To NB
TIRE[NB] : I=Param : H=H(I) : V=V(I) : ZBI(I)=1
Paste Bob H,V,1+Rnd(NBK-1) : Wait Vbl
If N>1
Restore R$+Str$(I)-" " : Read S
For T=1 To S : Read U : ZBI(U)=0 : Next
End If
Next
NBUT=0 : For N=1 To NB
If ZBI(N)>0 : Inc NBUT : BBUT(NBUT)=N : ZBUT(NBUT)=BZN+N : End If
Next : INICURS[1,0] : Return
End Proc
Procedure MEDAILLON
MED1: Data 8,0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2
MED2: Data 10,0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2,3,1,3,2
MED3: Data 12,0,0,0,1,0,2,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,1,3,2
MED4: Data 14,0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,1,3,2,3,3
MED5: Data 15,0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,0,3,1,3,2,3,3
Load "banqueI/medaillons.abk" : Paste Icon 352-DC,2,1
B$="B.chapeaux" : If DIFF>3 Then B$="K.cartes"
BANQBI[B$,""] : TEMPS[0]
Restore "MED"+Str$(DIFF)-" " : Read NB
Read X,Y : H(0)=(X*52)+365-DC : V(0)=Y*45+12
For N=1 To NB : Read X,CY : CX=X+1 : H(N)=(X*52)+378-DC : V(N)=CY*45+40
CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next
'
Gosub R_MEDAILLON : INICURS[CX,CY] : PARLE["Circle",1]
TSAB=Timer+49
Do
MULTIEXAM : If Param : Gosub R_MEDAILLON : Else Exit : End If
Loop
Pop Proc
'
''''''''''''''''''' routine de renouvellement '''''''''''''''''
R_MEDAILLON:
VIDE
NBUT=2+Rnd(1) : Rem Nombre d'images identiques au m�daillon
For N=1 To NB : ZBI(N)=0 : Next : Rem Vide tout
' Tire et pose le m�daillon
TIRE[0] : TIRE[NBK] : I=Param : Bob NB+1,H(0),V(0),I : Wait Vbl
' Reproduit NBUT fois et met en but
For X=1 To NBUT : BBUT(X)=I : AFFECTE[1,NB,I] : ZBUT(X)=BZN+Param
Next
' Fait NB-NBUT solitaires perdants, �ventuellement semblables entre eux
For B=NBUT+1 To NB
Repeat : I=1+Rnd(NBK-1) : Until Instr(SA$,Str$(I))=0
AFFECTE[1,NB,I] : Next
PLACE : Return
End Proc
Procedure SOLITAIRE
SOL1: Data 9,0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2
SOL2: Data 10,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2,3,1,3,2
SOL3: Data 12,0,1,0,2,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,1,3,2
SOL4: Data 14,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,1,3,2,3,3
SOL5: Data 16,0,0,0,1,0,2,0,3,1,0,1,1,1,2,1,3,2,0,2,1,2,2,2,3,3,0,3,1,3,2,3,3
Erase 1
If DIFF<4 : BANQBI["K.Jap",""] : Else BANQBI["K.Mahjong",""] : End If
Restore "SOL"+Str$(DIFF)-" " : Read NB : NH=Int(NB/2)-1
NBUT=NB-2*NH
For N=1 To NB : Read X,CY : CX=X+1 : H(N)=(X*52)+354-DC : V(N)=CY*45+5
CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next
Gosub R_SOLITAIRE : PARLE["NoTwin",1] : INICURS[1,1] : TSAB=Timer+49
Do
MULTIEXAM : If Param : Gosub R_SOLITAIRE : Else Exit : End If
Loop
Pop Proc
'
R_SOLITAIRE:
For N=1 To NB : ZBI(N)=0 : Next : NH=(NB-NBUT)/2
' Fait NH couples
TIRE[0] : For B=1 To NH : TIRE[NBK] : I=Param : CPL(B,0)=I
For X=1 To 2 : AFFECTE[1,NB,I] : CPL(B,X)=Param : Next
Next
' Fait NB-2*NH solitaires et les met en buts
For B=1 To NBUT
TIRE[NBK] : I=Param : AFFECTE[1,NB,I] : BBUT(B)=I : ZBUT(B)=BZN+Param
Next
PLACE : Return
End Proc
Procedure DEFENETRE
' Touchez les objets qui ne sont que dans un seul cadre
DEF1: Data 390,20,445,30,500,20,390,130,445,120,500,130
DEF2: Data 380,20,425,30,471,30,516,20,380,132,425,122,471,122,516,132
Erase 1 : Erase 2 : Load "banqueI/DeFenetre.abk" : Paste Icon 336-DC,2,1
B$="K.Japcercl" : If DIFF>3 Then B$="K.dedale"
BANQBI[B$,""] : NBUT=2
Restore DEF1 : NB=6 : CX1=3 : If DIFF>3 Then Restore DEF2 : NB=8 : CX1=4
N=0 : For CY=0 To 1 : For CX=1 To CX1
Inc N : Read H(N),V(N) : Add H(N),(-DC-20)
CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next : Next
Gosub R_DEFENETRE : PARLE["OneFrame",1] : INICURS[1,0]
TSAB=Timer+49
Do
MULTIEXAM : If Param : Gosub R_DEFENETRE : Else Exit : End If
Loop
Pop Proc
'
''''''''''''''''' renouvellement '''''''''''''''
R_DEFENETRE:
TIRE[0] : For N=1 To NB : ZBI(N)=0 : Next
' Met deux couples de part et d'autre
For X=1 To(NB-NBUT)/2
TIRE[NBK] : I=Param : AFFECTE[1,NB/2,I] : AFFECTE[1+NB/2,NB/2,I]
Next
' Met le reste en intrus
For X=1 To NBUT
TIRE[NBK] : I=Param : AFFECTE[1+(X-1)*NB/2,NB/2,I]
ZBUT(X)=BZN+Param : BBUT(X)=I
Next
' Place toutes les images
PLACE : Return
End Proc
Procedure AUTFENETRE
' Touch the objects when they have two twins in the other frame
AUT1: Data 400,25,375,72,415,90,390,130,520,25,495,72,535,90,510,130
Erase 1 : Erase 2 : Load "banqueI/AutreFenetre.abk" : Paste Icon 330-DC,2,1
BANQBI["M.Afrique",""] : TEMPS[0] : NBUT=1
Restore AUT1 : NB=8 : N=0
For CX=1 To 2 : For CY=0 To 3 : Inc N
Read H(N),V(N) : Add H(N),(-18-DC)
CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
Next : Next
Gosub R_AUTFENETRE : PARLE["OtherFrame",1] : INICURS[1,0]
TSAB=Timer+49
Do
MULTIEXAM : If Param : Gosub R_AUTFENETRE : Else Exit : End If
Loop
Pop Proc
''''''''''''''''' renouvellement '''''''''''''''
R_AUTFENETRE:
For N=1 To NB : ZBI(N)=0 : Next : TIRE[0]
' Met un objet/but d'une part et un couple identique de l'autre
TIRE[NBK] : I=Param : SIDE1=1+4*Rnd(1) : SIDE2=6-SIDE1
AFFECTE[SIDE1,4,I] : ZBUT(NBUT)=BZN+Param : BBUT(NBUT)=I
AFFECTE[SIDE2,4,I] : AFFECTE[SIDE2,4,I]
' Met un couple diff�rent en SIDE1
TIRE[NBK] : I=Param : AFFECTE[SIDE1,4,I] : AFFECTE[SIDE1,4,I]
' Comble le reste avec d'autres images
TIRE[NBK] : AFFECTE[SIDE1,4,Param]
TIRE[NBK] : AFFECTE[SIDE2,4,Param]
TIRE[NBK] : AFFECTE[SIDE2,4,Param]
PLACE : Return
End Proc
'
Procedure LESSIVE[X]
If X=0
Get Cblock 3,529,0,58,25
Get Cblock 2,522,155,75,42
Else
Bob Off : Bob Clear : Wait Vbl : Ink 41 : Bar 337-DC,0 To 572-DC,195
Update : Wait Vbl : Update Off
For X=1 To 2
Bob Off : Bob Clear : Wait Vbl : Put Cblock 3,529-DC,0
Put Cblock 2,522-DC,155 : Bob Draw : Screen Swap : Wait Vbl
Next
Update On
End If
End Proc
Procedure MULTIEXAM
TREN=Timer+VITESSE : BUTSAFAIRE=NBUT : RENOU=False
Do
CURSEUR[1] : If BOUTONB Then MZ=1
Exit If PTS>8 or PTS<1 or DUREE<1
If Not(BOUTONS) Then RENOU=True : Exit
If MZ=1 Then CLIQUE[13] : PTS=0 : Exit : Rem Puis destroytout
If MZ=2 : CLIQUE[14] : PARLE[DERANN$,1] : INICURS[CX,CY]
BOUTONS=False : End If
If MZ=3 Then CLIQUE[15] : PTS=0 : ABANDON=True : Exit
If BOUTONS : GAGNE=False
For B=1 To NBUT
If MZ=ZBUT(B) and BBUT(B)>0 : GAGNE=True : BBUT(B)=0 : Exit : End If
Next
TREN0=TREN-Timer
If GAGNE
Dec BUTSAFAIRE : BRUITB[100] : Inc PTS : METPOINTS
If PTS>8 : RENOU=False : Exit : End If
Else
TSAB0=TSAB-Timer : Dec PTS : METPOINTS : DESTROYPT
If PTS<1 : RENOU=False : Exit : End If
TSAB=TSAB0+Timer
End If
TREN=TREN0+Timer : While Mouse Key : Wend
End If
If(Timer>TREN) or(BUTSAFAIRE=0)
RENOU=True : Exit
End If
Loop
End Proc[RENOU]
Procedure ALEAMUS[S]
If S=0 Then FAITMUSE=0 : Pop Proc : Rem erase 5
While Timer<DIT : Wend
'D0$=Dir$
'Dir$=D0$+"MRsons/ressac/"
'F$(1)=Dir$+Left$(Dir First$(Dir$),20)-" " : NB=1
'For N=2 To 20
' F$(N)=Dir$+Left$(Dir Next$,20)-" " : Exit If F$(N)=Dir$
' Inc NB
'Next
'Dir$=D0$
FAITMUSE=1 : Add DIT,150
'While Timer<DIT : Wend
'FAITMUSE=1 : A$="mrsons/ressac/vent" : Bload A$,Start(6)
'Reserve As Chip Work 5,$FFFF : Bload "mrsons/ressac/vague",Start(5)
'Add DIT,60 : DIT0=DIT+Rnd(60)
End Proc
Procedure MUSE
If FAITMUSE=0 Then Volume %101,0 : Pop Proc
Data 14983,20000,23784
Restore : For X=1 To 1+Rnd(2) : Read F : Next
If Rnd(10)<7
A$="vague"
Else
A$="vent"
End If
A$="mrsons/ressac/"+A$
Open In 1,A$ : L=Lof(1) : Close 1 : Bload A$,Start(6)
Volume %101,20+Rnd(43) : Sam Raw %101,Start(6)+104,L,F
DIT=Timer+50*(L/F)+Rnd(200)
End Proc
'
' PROCEDURES GENERALES
'
'
Procedure INITEST
DC=0 : Rem nouvelles coordonn�es / petit �cran
If Screen=7 : PRENDVAR
Else
Load Iff "decors/"+Mid$(TEST$,1,2),0 : Double Buffer
LANGUE$="Ang" : PREF(1)=1 : PREF(3)=2
End If
Colour 0,0 : Colour Back 0 : Wait Vbl : View
Hide On : Limit Mouse : MXETAPE=40 : CYCLETAPE=8 : GAUCHE=True : Curs Off
XB(0)=280 : YB(0)=46 : Rem Suite
XB(1)=295 : YB(1)=63 : Rem Help
XB(2)=278 : YB(2)=79 : Rem Encore
BCUR=63 : Rem N� de bob du curseur
XP=282 : YP=4 : APTS=0 : BBOULE=15 : Rem bob des points sur le boulier
XC=253 : YC=177 : Rem compteur d'�tapes
XT=209 : YT=24 : Rem compteur du total
BOULBK=1 : CRSBK=2 : FLCHBK=3 : CERVBK=4 : BASEBLOCK=4 : Rem Blocks de base
BZN=8
For X=1 To 15 : Erase X : Next
Erase 7 : Reserve As Chip Work 7,7520 : Load "MRbruits/Brt0.sbk",7
'
BANQBI["",""]
'
ETAPE=0 : QST=ETAPE : DIFF=1 : ELTEMPS=100
'
' Boulier des points par �cran (Block BOULBK pour toutes les boules)
Get Block BOULBK,25+XP-DC,5+YP,10,10,1
'
' Compteur d'�tapes (Block CRSBK pour le curseur, initialis� ici)
HCURS=XC-DC : VCURS=YC-3*ETAPE : Get Block CRSBK,HCURS,VCURS,22,17,1
Paste Icon HCURS,VCURS,12
'
' Fl�ches (block FLCHBK, actualis� chaque fois)
'
' Difficult� (Block CERVBK actualis� chaque fois, initialis� ici)
AZDIF: Data 284,172,311,183
Data 285,161,314,172
Data 284,149,317,161
Data 285,133,321,149
Data 285,113,326,133
Restore AZDIF : Read H,V,H1,V1 : Add H,-DC : Add H1,-DC
Get Block CERVBK,H,V,H1-H,V1-V,1 : DIFF[0,DIFF]
Restore AZDIF
'
' Plage de travail (Block 1, de type "c")
Get Cblock 1,0,0,8,2
TEMPS[0] : PARLE["Start",2]
End Proc
Procedure PAUSEPOINTS
BZDIF: Data 284,172,311,183,285,161,314,172,284,149,317,161
Data 285,133,321,149,285,113,326,133
ALEAMUS[1] : A=0 : CX=1 : CY=0
If(PREF(4)=0) or(ETAPE<1)
Repeat
VIDCUR[0]
For I=0 To 2
CUR(1,I,0)=XB(I)-DC : CUR(1,I,1)=YB(I) : CUR(1,I,2)=I+1
Next
Restore BZDIF : For Y=4 To 8
Read H,V,H1,V1 : Add H,-DC : Add H1,-DC
CUR(1,11-Y,0)=H : CUR(1,11-Y,1)=V : CUR(1,Y-1,2)=12-Y : Next
CUR(0,2,0)=194-DC : CUR(0,2,1)=85 : CUR(0,2,2)=9
INICURS[CX,CY] : HCR=1 : VCR=7
CURSEUR[0] : A=Param : If BOUTONB : MZ=3 : End If
If(A=27) or(MZ=2) : Rem pr�sentations
ALEAMUS[0]
If MZ=2 : CLIQUE[14] : CX=1 : CY=1 : INICURS[CX,CY] : End If
DEPLACE: Data 1,0,1,1,1,2,0,2,1,2,1,1,1,0,1,1,1,2,1,3
Bob BCUR,CUR(1,0,0),CUR(1,0,1), : Wait Vbl : PARLE["Arrows",2]
Restore DEPLACE : For X=1 To 10
Read H,V
BRUITB[3] : Bob BCUR,CUR(H,V,0),CUR(H,V,1), : Wait Vbl
TEMPS=Timer+50
Repeat : K1=Mouse Key : Until Timer>TEMPS or K1>0
Exit If K1
Next
If K1<1
PRESENTE: Data 1,0,"Advance",1,1,"Help",1,2,"Main"
Data 0,2,"Preferences"
Wait 50 : PARLE["select",2] : Wait 250 : Restore PRESENTE
For X=1 To 4
Read H,V,A$ : Bob BCUR,CUR(H,V,0),CUR(H,V,1), : Wait Vbl
PARLE[A$,2]
T=Timer+250 : Repeat : K2=Mouse Key : Until Timer>T or K2>0
Exit If K2
Next
If K2<1
PARLE["Level",2] : Rem Amal Off 15 : Wait Vbl
For X=1 To 5 : Bob BCUR,CUR(1,8-X,0),CUR(1,8-X,1), : Wait Vbl
T=Timer+50
Repeat : K3=Mouse Key : Until Timer>T or K3>0
Exit If K3
Bob BCUR,,,NBK+16 : Wait Vbl : Rem AJOUR : DIFF[X]
'Bob BCUR,,,NBK+17 : Wait Vbl : Wait 40
Next
If K3<1
T=Timer+100
Repeat : K=Mouse Key : Until Timer>T or K>0
End If
End If
'DIFF[1]
End If
MZ=0 : INICURS[1,0] : ALEAMUS[1] : Wait 50
End If
If A=43
ETAPE=Min(39,ETAPE+1) : ETAPE[ETAPE] : Inc QST : MZ=0
End If
If A=45
ETAPE=Max(0,ETAPE-1) : ETAPE[ETAPE] : QST=Max(0,QST-1) : MZ=0
End If
If 3<MZ and MZ<9
BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : AJOUR : DIFF[DIFF,MZ-3]
End If
If MZ=9 : ALEAMUS[0] : BRUITB[50]
P=1 : If Screen=3 : P=2 : End If : PREFERENCES[P] : ALEAMUS[1]
MZ=0
End If
Until(MZ=1) or(MZ=3) or BOUTONB
Else
MZ=1
End If : ALEAMUS[0]
Wait 1+50*PREF(4) : Rem If(PREF(4)=1) and(ETAPE>0) Then MZ=1
If MZ=1
ALEAMUS[0] : DIT=0
CLIQUE[13] : Inc ETAPE : Inc QST
If QST>CYCLETAPE
A=DIFF : QST=1 : DIFF=Min(DIFF+1,5) : DIFF[A,DIFF]
End If
ETAPE[ETAPE] : TEMPS[0]
End If
If(MZ=3) or BOUTONB Then CLIQUE[15]
Amal Off 15 : Bob Off BCUR : Bob Clear : AJOUR
End Proc[MZ]
Procedure INICURS[CX,CY]
Limit Mouse
If Chanan(15) Then Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1), : Pop Proc
Channel 15 To Bob BCUR : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),NBK+17
Wait Vbl : Amal 15,"A 0,(R1,46)(R2,4)"
Amreg(15,1)=NBK+17 : Amreg(15,2)=NBK+18 : Amal On 15 : Clear Key
End Proc
Procedure CURSEUR[C]
BOUTONA=False : BOUTONB=False : BOUTONS=False
Clear Key
Repeat
Repeat : T1=Timer+50
For X=1 To 10
X=X Mouse : Y=Y Mouse : Wait 3 : U=X Mouse : V=Y Mouse
Exit If X=U and Y=V
Next
X Mouse=150 : Y Mouse=100 : MX0=X Mouse : MY0=Y Mouse : DM=0
Repeat
If Timer>DIT Then MUSE
If C=1 : Rem En cours de question
If Timer>TSAB : TEMPS[1] : TSAB=Timer+49 : End If
If(PTS<1) or(DUREE<1) : MZ=0 : Exit 3 : End If
If Timer>TREN : A=0 : Exit 3 : End If
End If
If C=2 : Rem En menu principal
If Timer>T1
Restore "ETOILE"
For X=1 To 1+Rnd(21) : Read A,B : Next
Bob 3,A,B, : Wait Vbl
T2=Timer+10+Rnd(20) : T1=T2+200
End If
If Timer>T2
Bob 3,-20,, : T1=Timer+50+50*Rnd(2) : T2=T1+200
End If
End If
MX=X Mouse : MY=Y Mouse : A$=Inkey$
Until A$<>"" or Mouse Key or Abs(MX0-MX)>DM or Abs(MY0-MY)>DM
K=Mouse Key : R=Asc(A$)
A=-28*(MX-MX0>DM)-29*(MX0-MX>DM)-30*(MY0-MY>DM)-31*(MY-MY0>DM)
If(R>27) and(R<32) Then A=R
X=CX : Y=CY
If(A=28) Then Add X,1
If(A=29) Then Add X,-1
If(A=30) Then Add Y,-1
If(A=31) Then Add Y,1
Until((X<0)+(Y<0)+(X>HCR)+(Y>VCR)=0)
If(X<>CX) or(Y<>CY)
If(CUR(X,Y,0)=0) and(CUR(X,Y,1)=0)
If(A=28) or(A=29)
Repeat : Add Y,-1,0 To VCR
Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
End If
If(A=30) or(A=31)
Repeat : Add X,1,0 To HCR
Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
End If
End If
BRUITB[3] : CX=X : CY=Y : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),
Exit If C=2
End If
Until(K>0)+(R=43)+(R=45)+(R=27)+(R=13)
MZ=CUR(CX,CY,2)
BOUTONS=(K>0)+(R=13) : BOUTONA=(K=1)+(K=3)+(R=13) : BOUTONB=(K>1)
End Proc[R]
Procedure VIDCUR[A]
For X=0 To 12 : For Y=0 To 9 : For Z=0 To 2 : CUR(X,Y,Z)=0
Next : Next : Next
If A=1 : Rem situe les trois fl�ches
For I=0 To 2 : CUR(0,I,0)=XB(I)-DC : CUR(0,I,1)=YB(I)
CUR(0,I,2)=I+1 : Next
HCR=1 : VCR=2
End If
End Proc
Procedure PARLE[A$,T]
If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
If PREF(1)<1 Then Pop Proc
While Timer<DIT : Wend
Volume %101,63 : DERANN$=A$
T$=TEST$ : If T=2 Then T$="General"
SEX$=Mid$("FM",1+Rnd(1),1) : If Instr("JapIta",LANGUE$) Then SEX$="F"
F$="Paroles/"+T$+"/"+LANGUE$+SEX$+"/"+A$
If Not Exist(F$) Then Pop Proc
Open In 1,F$ : L=Lof(1) : Close 1
If L>$FFFF Then Pop Proc
S6=Start(6) : Bload F$,S6 : Volume %101,63 : Sam Raw %101,104+S6,L,20000
DIT=Timer+(L/400)+20
If Exist(F$+Chr$(50))
While Timer<DIT : Wend : F$=F$+Chr$(50)
Open In 1,F$ : L=Lof(1) : Close 1
If L>64000 : Pop Proc : End If
Bload F$,S6 : Sam Raw %101,104+S6,L,20000
DIT=Timer+(L/400)+20
End If
If T=1 Then While Timer<DIT : Wend
End Proc
Procedure BRUIT[F,V,A$]
If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
If PREF(2) Then Pop Proc
While Timer<DIT : Wend
S=20000 : If F<>0 Then S=1000*F
If L>65430 Then Pop Proc
Open In 1,"MRbruits/"+A$ : L=Lof(1) : Close 1
Bload "MRbruits/"+A$,Start(6)
Volume %1010,63 : If V<>0 Then Volume %1010,V
Sam Raw %1010,Start(6)+104,L,S : DIT=Timer+L/400
End Proc
Procedure BRUITB[N]
F=20000 : If N=100 Then N=3 : F=30000
If N=50 Then N=3 : F=10000
S0=Start(7) : S=Leek(S0+8*N) : L=Leek(S0+8*N+4)
Volume %1010,63 : Sam Raw %1010,S+S0+105,L-105,F : DIT7=Timer+L/400
End Proc
Procedure TEMPS[T]
' Mettre sur la voix
If T=0 : TEMPS=DIFF-1 : Else BRUITB[2] : End If
Inc TEMPS
If TEMPS>10
Dec PTS : METPOINTS : DESTROYPT : Dec DUREE
If DUREE<1 or PTS<1 : Pop Proc : End If
TEMPS=DIFF
End If
Paste Icon 578-DC,5,TEMPS+15 : Wait Vbl
End Proc
Procedure CLIQUE[I]
Amal Off 1 : Bob Off BCUR : Bob Clear : AJOUR
BRUITB[50] : H=XB(I-13)-DC : V=YB(I-13)
Get Block FLCHBK,H,V,40,40,1 : Paste Icon H,V,I : While Mouse Key : Wend
ABLOC[FLCHBK]
End Proc
Procedure AIDE
End Proc
Procedure ETAPE[ETAPE]
Update : Update Off : Wait Vbl
Bob Clear : Put Block CRSBK,XC-DC, : Bob Draw : Screen Swap : Wait Vbl
Bob Clear : Put Block CRSBK,XC-DC, : Bob Draw : Screen Swap : Wait Vbl
Update On
HCURS=XC-DC : VCURS=YC-3*ETAPE
Get Block CRSBK,HCURS,VCURS,22,17,1 : Paste Icon HCURS,VCURS,12
End Proc
Procedure DIFF[I1,I2]
ZD1: Data 284,172,311,183
ZD2: Data 285,161,314,172
ZD3: Data 284,149,317,161
ZD4: Data 285,133,321,149
ZD5: Data 285,113,326,133
If I1>0
Restore "ZD"+Str$(I1)-" " : Read H : Add H,-DC
Update : Update Off : Wait Vbl
Bob Clear : Put Block CERVBK,H, : Bob Draw : Screen Swap : Wait Vbl
Bob Clear : Put Block CERVBK,H, : Bob Draw : Screen Swap : Wait Vbl
Update On
End If
I=Min(I2,5) : Restore "ZD"+Str$(I)-" " : Read H,V,H1,V1
Add H,-DC : Add H1,-DC
Get Block CERVBK,H,V,H1-H,V1-V,1 : Paste Icon H,V,6+I
DIFF=I
End Proc
Procedure FAITTOTAL
I=PTS : B=BBOULE
PT1: Data 25,5
PT2: Data 14,5
PT3: Data 3,5
PT4: Data 25,16
PT5: Data 14,16
PT6: Data 3,16
PT7: Data 25,27
PT8: Data 14,27
PT9: Data 3,27
If PTS>0
Amal Off : Bob Off : AJOUR
A$="A 1,(R2,7)(R3,1)(R4,1);M R0,0,5;M 0,R1,3;M -4,0,4"
For X=I To 1 Step -1
Dec PTS : METPOINTS : Inc TPTS(TEST)
Restore "PT"+Str$(PTS+1)-" " : Read H,V : H=XP+H-DC : V=YP+V
Dec B : Channel B To Bob B : Bob B,H,V,NBK+1 : Wait Vbl
Amal B,A$
Amreg(B,0)=XT+55-H-DC : Amreg(B,1)=YT+4-V : Amreg(B,2)=NBK+1
Amreg(B,3)=NBK+15 : Amreg(B,4)=NBK+16
Amal On B
If X=I : Sam Loop On : BRUIT[0,0,"Bobloc"] : End If
METTOTAL["+",TPTS(TEST),XT,YT] : Wait Vbl
Next
While Chanmv(B) : Wend
Bob Off : Bob Clear : Sam Loop Off
End If
If PTS<0
PTS=0 : METPOINTS
TPTS(TEST)=Max(TPTS(TEST)-1,0) : METTOTAL["-",TPTS(TEST),XT,YT]
End If
End Proc
Procedure METTOTAL[D$,N,X0,Y0]
If D$="+" or N>0
U=N mod 10 : N=(N-U)/10
If N>0
D=N mod 10 : N=(N-D)/10
If N>0
C=N mod 10
End If
End If
Paste Icon X0-DC,Y0,27+C : Wait Vbl
Paste Icon X0+13-DC,Y0,27+D : Wait Vbl
Paste Icon X0+26-DC,Y0,27+U : Wait Vbl
Else
Paste Icon X0,Y0,26
Paste Icon X0+13,Y0,26
Paste Icon X0+26,Y0,26 : Paste Icon X0+26,Y0,26
End If
End Proc
Procedure METPOINTS
APT1: Data 25,5
APT2: Data 14,5
APT3: Data 3,5
APT4: Data 25,16
APT5: Data 14,16
APT6: Data 3,16
APT7: Data 25,27
APT8: Data 14,27
APT9: Data 3,27
If PTS<0 Then APTS=0 : Pop Proc
If PTS>APTS
For X=Max(1,APTS+1) To PTS
Restore "APT"+Str$(X)-" " : Read H,V : Paste Icon XP+H-DC,YP+V,1
Next
Else
For X=APTS To Max(PTS+1,1) Step -1
Restore "APT"+Str$(X)-" "
Read H,V : H=XP+H-DC : V=YP+V : AUTOBLOC[BOULBK,H,V]
Next
End If
APTS=PTS
End Proc
Procedure DESTROYPT
If PTS<0 Then Pop Proc
BPT1: Data 25,5
BPT2: Data 14,5
BPT3: Data 3,5
BPT4: Data 25,16
BPT5: Data 14,16
BPT6: Data 3,16
BPT7: Data 25,27
BPT8: Data 14,27
BPT9: Data 3,27
BRUITB[4] : Restore "BPT"+Str$(PTS+1)-" " : Read H,V
B=BBOULE-1 : Dec BBOULE : If BBOULE=12 Then BBOULE=15
BL=B+20
DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(R2,1)"
DSP$=DSP$+";M 0,100,62"
Channel B To Bob BL : Bob BL,XP+H-DC,YP+V,NBK+3 : Wait Vbl : Amal B,DSP$
Amreg(B,0)=10 : Amreg(B,1)=NBK+3 : Amreg(B,2)=NBK+16 : Amal On B
While Chanmv(B) or Chanan(B) : Wend
End Proc
Procedure DESTROYTOUT
Data 25,5,14,5,3,5,25,16,14,16,3,16,25,27,14,27,3,27
If APTS<1 Then Pop Proc
BRUIT[0,0,"perdu!"] : Bob Off : Bob Clear : Amal Off
Restore : For P=1 To APTS : Read H,V
H(P)=XP+H-DC : V(P)=YP+V : AUTOBLOC[BOULBK,H(P),V(P)] : Next
For P=1 To APTS : Bob P,H(P),V(P),NBK+3 : Wait Vbl : Next
DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(R1+13,1)"
DSP$=DSP$+";M 0,100,62"
For P=APTS To 1 Step -1
Channel P To Bob P : Bob P,H(P),V(P), : Wait Vbl
Amal P,DSP$ : Amreg(P,0)=10 : Amreg(P,1)=NBK+3 : Amal On P
Next
While Chanmv(1) or Chanan(1) : Wend : Wait Vbl : Wait 25
APTS=0 : PTS=0
End Proc
Procedure DROITE[E,D]
If Not(GAUCHE) Then Pop Proc
Amal Off : Wait Vbl
Channel 1 To Screen Offset E : Screen E : Screen To Front E
Amal 1,"M 20,0,5;M R0,0,R1;M 20,0,5"
Amreg(1,0)=D : Amreg(1,1)=20 : If D<100 Then Amreg(1,1)=5
Amal On 1 : While Chanmv(1) : Wend : GAUCHE=False
End Proc
Procedure GAUCHE[E,D]
If GAUCHE Then Pop Proc
Amal Off : Wait Vbl
Channel 1 To Screen Offset E : Screen E
Amal 1,"M -20,0,5 ;M R0,0,R1;M -20,0,5"
Amreg(1,0)=-D : Amreg(1,1)=20 : If D<100 Then Amreg(1,1)=5
Amal On 1 : While Chanmv(1) : Wend : GAUCHE=True
End Proc
Procedure DIAPHRAGME[A,B]
' montre la moiti� gauche de B arrivant en diaphragme sur A
Autoback 0 : Screen To Front A
For X=1 To 59 Step 2
H0=170-X : H1=170+X : V0=128-X : V1=128+X
Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
Next
For X=60 To 130 Step 10
H0=170-X : H1=170+X : V0=128-X : V1=128+X
Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
Next
For X=131 To 176 Step 20
H0=170-X : H1=170+X : V0=0 : V1=260
Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
Next
Screen To Front B : Screen B : Rem Screen Close A
End Proc
Procedure CLOCK[X,Y]
Change Mouse 3 : X Mouse=X : Y Mouse=Y : Show On
End Proc
Procedure PASSECRAN[A$,E,F,G]
Screen Open 2,360,270,64,Lowres : Flash Off
Get Palette E : Screen To Front E
Screen Copy E,0,0,360,270 To 2,0,0 : Screen Close E
Load Iff A$,F : Flash Off : Get Palette 2
Screen To Front 2 : Screen F
If G=1 Then Screen Close 2 : Double Buffer
End Proc
Procedure BANQBI[B$,I$]
CLOCK[280,60] : Amal Off : Bob Off : AJOUR : Erase 1 : Erase 2
If B$=""
NBK=0 : Load "BanqueB/BoulesC.abk"
Else
Load "BanqueB/"+B$+".abk" : NBK=Length(1) : Load "BanqueB/BoulesC.abk",1
End If
Load "BanqueI/Ftdb.abk" : NBI=Length(2)
If I$<>"" Then Load "BanqueI/"+I$+".abk",2
Make Icon Mask : Hide On
End Proc
Procedure PREFERENCES[CHOIX]
PRFV: Data "voice","sounds","language","speed","music"
PRF1: Data 0,0,6,0,10,7,1,"voice"
PRF2: Data 1,0,69,0,73,7,2,"sounds"
PRF3: Data 1,1,37,15,41,21,3,"Language"
PRF4: Data 0,2,6,30,13,35,8,"speed"
PRF5: Data 1,2,69,30,74,35,9,"music"
DRAPEAUX: Data 3,4,6,0,11,5,0,0,0,0,0,0,7
DIALECTES: Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
SUITE_D_OPTIONS: Data 2,3,4,5,6,13,4,4,4,4,4,4,1
CLOCK[300,150] : B$="A.PeTdbacc" : BANQBI[B$,""] : ZB=Length(1)+1 : TB=10
ECR=Screen : ZCR=4
Screen Open ZCR,112,66,64,Lowres : Flash Off
Screen ZCR : Flash Off : Get Palette ECR : Cls 0
Screen To Front ECR : Screen ZCR : Paste Bob 0,0,TB : Wait Vbl
For X=1 To 5 : Restore "PRF"+Str$(X)-" "
Read A,B,C,D,E,F,Z
If X=3
Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next
If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
Else
If PREF(X) : Paste Bob E,F,Z : End If
End If
Next : Get Bob ZCR,ZB,0,0 To 111,63 : Screen ECR
PARLE["Choose",2] : Hide On
If CHOIX=0 : H=40 : V=73
For Z=1 To 64 Step 2
ZZ=Min(2*Z,112) : Get Bob ZCR,ZB,0,0 To ZZ,Z : Bob 1,H,V,ZB : Wait Vbl
Next
Else
Bob 1,400,10,ZB : Wait Vbl
If CHOIX=1
Limit Bob 1,0,0 To 224,200
Channel 1 To Bob 1 : Bob 1,222,120, : Wait Vbl
Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend
H=110 : V=120
Else
Limit Bob 1,158,0 To 400,200
Channel 1 To Bob 1 : Bob 1,36,120, : Wait Vbl
Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend
H=148 : V=120
End If
End If
VIDCUR[0]
For X=1 To 5 : Restore "PRF"+Str$(X)-" "
Read A,B,C,D,E,F,Z : Add E,H : Add F,V
If X=3
Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next
If Z=0 : Z=NBK+16 : End If : Bob X+1,E,F,Z
Else
If PREF(X)
Bob X+1,E,F,Z
Else
Bob X+1,E,F,NBK+16
End If : Wait Vbl
End If
Next : Bob 1,,,TB : Wait Vbl
'
'
VIDCUR[0] : K=0
For X=1 To 5 : Restore "PRF"+Str$(X)-" "
Read A,B,C,D,E,F,Z,P$ : Add C,H : Add D,V
CUR(A,B,0)=C : CUR(A,B,1)=D : CUR(A,B,2)=X : Z(X)=Z
If K<1
Bob BCUR,CUR(A,B,0),CUR(A,B,1),NBK+17 : Wait Vbl : PARLE[P$,2]
TEMPS=Timer+50 : Repeat : K=Mouse Key : Until Timer>TEMPS or K>1
End If
Next
While Mouse Key : Wend
HCR=1 : VCR=2 : INICURS[1,1] : L$=LANGUE$
Do
CURSEUR[0] : If BOUTONB Then MZ=0 : BOUTONB=False
Exit If MZ=0 or Not(BOUTONS)
If MZ=3
Restore SUITE_D_OPTIONS : For X=1 To PREF(3) : Read PREF(3) : Next
Restore DIALECTES : For X=1 To PREF(3) : Read LANGUE$ : Next
Restore DRAPEAUX : For X=1 To PREF(3) : Read Z : Next
If Z=0 : Z=NBK+16 : End If
Bob MZ+1,,,Z : Wait Vbl
Else
If PREF(MZ)
Bob MZ+1,,,NBK+16 : PREF(MZ)=0
Else
Bob MZ+1,,,Z(MZ) : PREF(MZ)=1
End If
End If : Wait Vbl
Restore PRFV : For X=1 To MZ : Read P$ : Next : PARLE[P$,2]
While Mouse Key : Wend
Loop
FINDEPREF:
AJOUR : BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : Wait Vbl
CX=1 : CY=0
Screen ZCR : Paste Bob 0,0,TB
For X=1 To 5 : Restore "PRF"+Str$(X)-" "
Read A,B,C,D,E,F,Z
If X=3
Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next
If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
Else
If PREF(X) : Paste Bob E,F,Z : End If
End If
Next
Get Bob ZCR,ZB,0,0 To 111,64 : Screen ECR : Bob 1,,,ZB : Wait Vbl
For X=2 To 6 : Bob X,,,NBK+16 : Next
If CHOIX=0 : Screen ZCR
For Z=64 To 1 Step -4
ZZ=Min(2*Z,112)
Get Bob ZCR,ZB,0,0 To ZZ,Z : Screen ECR : Bob 1,40,73,ZB : Wait Vbl
Next
Bob 1,,,NBK+16 : Wait Vbl : Bob Off 1 : Wait Vbl
Else
Channel 1 To Bob 1 : Bob 1,,,Length(1) : Wait Vbl
If CHOIX=1
Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend
Else
Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend
End If
End If : Screen Close ZCR
Limit Bob : Amal Off : Bob Off : AJOUR : CLOCK[300,150]
If L$<>LANGUE$
If CHOIX=0
A$="Decors/Entree"+LANGUE$ : PASSECRAN[A$,1,1,1]
End If
If CHOIX=1
Load "banqueI/Titror"+LANGUE$+".ABK" : Paste Icon 20,48,TEST
End If
End If
BANQBI["",""]
End Proc
Procedure NETTOIE[BLK]
Update : Wait Vbl : Update Off
Bob Off : Bob Clear : Put Cblock BLK : Bob Draw : Screen Swap : Wait Vbl
Bob Off : Bob Clear : Put Cblock BLK : Bob Draw : Screen Swap : Wait Vbl
Update On
End Proc
Procedure AUTOBLOC[N,X,Y]
Update : Update Off : Wait Vbl
Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl
Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl
Update On
End Proc
Procedure ABLOC[N]
Update : Update Off : Wait Vbl
Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl
Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl
Update On
End Proc
Procedure AJOUR
Update : Wait Vbl : Update : Wait Vbl
End Proc
Procedure TIRE[M]
If M=0 Then SA$="" : Pop Proc
' Tire un nombre parmi M et nouveau dans SA$
M=M-1 : Repeat : I=1+Rnd(M) : Until Instr(SA$,Str$(I)+" ")=0
SA$=SA$+Str$(I)+" "
End Proc[I]
Procedure TIRB[M]
If M=0 Then SB$="" : Pop Proc
' Tire un nombre parmi M et nouveau dans SB$
M=M-1 : Repeat : I=1+Rnd(M) : Until Instr(SB$,Str$(I)+" ")=0
SB$=SB$+Str$(I)+" "
End Proc[I]
Procedure AFFECTE[DEB,NOMB,IMAGE]
' DEB : premier indice, NOMB : nombre total, premier compris
' IMAGE: l'image � affecter
Repeat : N=DEB+Rnd(NOMB-1) : Until 0=ZBI(N) : ZBI(N)=IMAGE
End Proc[N]
Procedure VIDE
Update : Bob Update Off : Wait Vbl
For N=1 To NB : Bob N,H(N),V(N),NBK+16 : Wait Vbl : Next
Update : Bob Update On
End Proc
Procedure PLACE
Update : Bob Update Off : Wait Vbl
For N=1 To NB : Bob N,H(N),V(N),ZBI(N) : Wait Vbl : Next
Update : Bob Update On
End Proc
Procedure VOISTEST
If(ETAPE>1) and(Screen=3)
DROITE[3,45]
Else
TPTS(TEST)=0 : METTOTAL["+",0,XT,YT] : DROITE[Screen,235] : DC=190
S=Screen : Screen Open 3,450,270,64,Lowres : Flash Off : Get Palette S
Screen To Front S : Screen Copy S,190,0,640,270 To 3,0,0
Screen Offset 3,85,0 : Screen Close S : Double Buffer
Erase 7 : Reserve As Chip Work 7,65000
A$="MRbruits/Brt4.sbk" : If Not(Exist(A$)) : A$="df0:Brt4.sbk" : End If
Load A$,7
End If
End Proc
Procedure POSEVAR
Screen Open 7,32,10,16,Lowres : Flash Off : Screen Hide 7 : Screen 7
For X=1 To 5 : Doke Phybase(0)+2*(X-1),PREF(X) : Next
For X=1 To 4 : Doke Phybase(0)+8+2*X,TPTS(X) : Next
End Proc
Procedure PRENDVAR
Screen Hide 7 : Screen 7
For X=1 To 5 : PREF(X)=Deek(Phybase(0)+2*(X-1)) : Next
For X=1 To 4 : TPTS(X)=Deek(Phybase(0)+8+2*X) : Next
Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
Restore : For X=1 To PREF(3) : Read LANGUE$ : Next
Screen Close 7
End Proc
Procedure RETOUR
Erase 1 : Erase 2 : Del Block : Del Cblock
S=Screen : Screen Open 2,360,270,64,Lowres : Flash Off
Get Palette S : Screen To Front S
Screen Copy S,0,0,360,270 To 2,0,0 : Screen Close S
CLOCK[280,60] : Load Iff "Decors/Entree"+LANGUE$,1
Flash Off : Screen To Front 2
Colour 0,0 : Colour Back 0 : Wait Vbl : View
Screen 2 : Autoback 0 : Screen To Front 2 : N=0 : D=2
BRUIT[0,0,"antizoom"]
For X=0 To 130 Step 1 : Repeat
H1=X : H2=X+D : H4=350-X : H3=H4-D
V1=X : V2=X+D : V4=270-X : V3=V4-D
Screen Copy 1,H1,V1,H4,V2 To 2,H1,V1
Screen Copy 1,H3,V2,H4,V4 To 2,H3,V2
Screen Copy 1,H1,V3,H3,V4 To 2,H1,V3
Screen Copy 1,H1,V2,H2,V3 To 2,H1,V2
Wait Vbl : Screen Swap : Inc N
Until N>1 : Next
Screen Close 2
Colour 0,0 : Colour Back 0 : Wait Vbl : View
POSEVAR : Screen 1 : A$="A48.amos" : If Exist("df0:"+A$) Then A$="DF0:"+A$
Run A$
End Proc
Procedure XY
X0=0 : Y0=0 : Change Mouse 1 : Show On : Limit Mouse : Curs Off
Repeat
X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
If X<>X0 or Y<>Y0
Locate 15,1 : Print X;" " : Locate 15,2 : Print Y;" "
X0=X : Y0=Y
End If
K$=Inkey$ : Exit If K$<>""
Until Mouse Key
End Proc